home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / earcd / dev / amos / vr_tapsv.lha / Uncode_proc.AMOS / Uncode_proc.amosSourceCode
AMOS Source Code  |  1997-02-02  |  5KB  |  280 lines

  1. '
  2. ' VR T.A.P.S. - The AMOS Protection System 
  3. '
  4. '            By James Kaylor 
  5. '
  6. '          Freely distributable    
  7. '
  8. ' TAPS 1997 - Version 1.1  
  9. ' ---------------------------------------------  
  10. ' All procedures are Copyright 1997 James Kaylor 
  11. '
  12. Procedure UNCODE[FILENAME$,BANK,PASSWORD$]
  13. '
  14. F$=FILENAME$
  15. Open In 1,F$
  16. L=Lof(1)
  17. Close 1
  18. Erase 10
  19. Reserve As Data 10,L
  20. Bload F$,10
  21. If Left$(PASSWORD$,1)="P"
  22.    FLAG$="ILBM"
  23.    Left$(PASSWORD$,1)="7"
  24.        For I=41 To 300
  25.          Add CD,1,1 To Len(PASSWORD$)
  26.          CODE=Val(Mid$(PASSWORD$,CD,1))
  27.          C=Peek(Start(10)+I)
  28.          Ror.b CODE,C
  29.          Poke Start(10)+I,Asc(Chr$(C))
  30.        Next I
  31. End If 
  32. If Left$(PASSWORD$,1)="T"
  33.    II=-100
  34.    Left$(PASSWORD$,1)="9"
  35. End If 
  36. '
  37. CD=0
  38. If L>39
  39.  For I=0 To 19
  40.   Add CD,3,1 To Len(PASSWORD$)
  41.   CODE=Val(Mid$(PASSWORD$,CD,1))
  42.   C=Peek(Start(10)+I)
  43.   Ror.b CODE,C
  44.   Poke Start(10)+I,Asc(Chr$(C))
  45.  Next I
  46.  For I=20 To 31
  47.   Add CD,4,1 To Len(PASSWORD$)
  48.   CODE=Val(Mid$(PASSWORD$,CD,1))
  49.   C=Peek(Start(10)+I)
  50.   Ror.b CODE,C
  51.   Poke Start(10)+I,Asc(Chr$(C))
  52.  Next I
  53.  For I=32 To 40
  54.   Add CD,2,1 To Len(PASSWORD$)
  55.   CODE=Val(Mid$(PASSWORD$,CD,1))
  56.   C=Peek(Start(10)+I)
  57.   Ror.b CODE,C
  58.   Poke Start(10)+I,Asc(Chr$(C))
  59.  Next I
  60. End If 
  61. I=41
  62. If II<>-100
  63. II=Val(Mid$(PASSWORD$,1,2))
  64.   If II<15 or II>45
  65.     II=15
  66.   End If 
  67. End If 
  68. If II=-100
  69.    II=3
  70. End If 
  71. Repeat 
  72.  If I<L-2
  73.   Add CD,1,1 To Len(PASSWORD$)
  74.   If CODE>2 and CODE<7
  75.      Add CD,-2,1 To Len(PASSWORD$)
  76.   End If 
  77.   If CODE>0 and CODE<3
  78.      Add CD,2,1 To Len(PASSWORD$)
  79.   End If 
  80.   CODE=Val(Mid$(PASSWORD$,CD,1))
  81.   C=Peek(Start(10)+I)
  82.   Ror.b CODE,C
  83.   Poke Start(10)+I,Val(Bin$(C,8))
  84.  End If 
  85.   Add I,II
  86. Until I>L-2
  87. '
  88. If II=3
  89.    Left$(PASSWORD$,1)="T"
  90.    PW$=PASSWORD$
  91. End If 
  92. ' -------------
  93. If FLAG$="ILBM"
  94.    C=-1
  95.    CD=8
  96.   Else 
  97.    C=0
  98.    CD=17
  99. End If 
  100. If BANK>C and BANK<CD
  101. Bsave "ram:f",Start(10) To Start(10)+Length(10)
  102. Erase 10
  103. If FLAG$<>"ILBM"
  104. Erase BANK
  105.  If II<>3
  106.     Load "ram:f",BANK
  107.    Else 
  108.     Reserve As Data BANK,L
  109.     Bload "ram:f",BANK
  110.  End If 
  111.  Else 
  112.    Load Iff "ram:f",BANK
  113. End If 
  114. Kill "ram:f"
  115. End If 
  116. Erase 10
  117. FLAG$=""
  118. '
  119. End Proc
  120. Procedure UNCODE_BANK[FROM_BANK,BANK,PASSWORD$]
  121. '
  122. L=Length(FROM_BANK)
  123. If Left$(PASSWORD$,1)="P"
  124.    FLAG$="ILBM"
  125.    Left$(PASSWORD$,1)="7"
  126.        For I=41 To 300
  127.          Add CD,1,1 To Len(PASSWORD$)
  128.          CODE=Val(Mid$(PASSWORD$,CD,1))
  129.          C=Peek(Start(FROM_BANK)+I)
  130.          Ror.b CODE,C
  131.          Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  132.        Next I
  133. End If 
  134. If Left$(PASSWORD$,1)="T"
  135.    II=-100
  136.    Left$(PASSWORD$,1)="9"
  137. End If 
  138. '
  139. CD=0
  140. If L>39
  141.  For I=0 To 19
  142.   Add CD,3,1 To Len(PASSWORD$)
  143.   CODE=Val(Mid$(PASSWORD$,CD,1))
  144.   C=Peek(Start(FROM_BANK)+I)
  145.   Ror.b CODE,C
  146.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  147.  Next I
  148.  For I=20 To 31
  149.   Add CD,4,1 To Len(PASSWORD$)
  150.   CODE=Val(Mid$(PASSWORD$,CD,1))
  151.   C=Peek(Start(FROM_BANK)+I)
  152.   Ror.b CODE,C
  153.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  154.  Next I
  155.  For I=32 To 40
  156.   Add CD,2,1 To Len(PASSWORD$)
  157.   CODE=Val(Mid$(PASSWORD$,CD,1))
  158.   C=Peek(Start(FROM_BANK)+I)
  159.   Ror.b CODE,C
  160.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  161.  Next I
  162. End If 
  163. I=41
  164. If II<>-100
  165. II=Val(Mid$(PASSWORD$,1,2))
  166.   If II<15 or II>45
  167.     II=15
  168.   End If 
  169. End If 
  170. If II=-100
  171.    II=3
  172. End If 
  173. Repeat 
  174.  If I<L-2
  175.   Add CD,1,1 To Len(PASSWORD$)
  176.   If CODE>2 and CODE<7
  177.      Add CD,-2,1 To Len(PASSWORD$)
  178.   End If 
  179.   If CODE>0 and CODE<3
  180.      Add CD,2,1 To Len(PASSWORD$)
  181.   End If 
  182.   CODE=Val(Mid$(PASSWORD$,CD,1))
  183.   C=Peek(Start(FROM_BANK)+I)
  184.   Ror.b CODE,C
  185.   Poke Start(FROM_BANK)+I,Val(Bin$(C,8))
  186.  End If 
  187.   Add I,II
  188. Until I>L-2
  189. '
  190. If II=3
  191.    Left$(PASSWORD$,1)="T"
  192.    PW$=PASSWORD$
  193. End If 
  194. ' -------------
  195. If FLAG$="ILBM"
  196.    C=-1
  197.    CD=8
  198.   Else 
  199.    C=0
  200.    CD=17
  201. End If 
  202. If BANK>C and BANK<CD
  203. Bsave "ram:f",Start(FROM_BANK) To Start(FROM_BANK)+Length(FROM_BANK)
  204. Erase FROM_BANK
  205. If FLAG$<>"ILBM"
  206. Erase BANK
  207.  If II<>3
  208.     Load "ram:f",BANK
  209.    Else 
  210.     Reserve As Data BANK,L
  211.     Bload "ram:f",BANK
  212.  End If 
  213.  Else 
  214.    Load Iff "ram:f",BANK
  215. End If 
  216. Kill "ram:f"
  217. End If 
  218. FLAG$=""
  219. '
  220. End Proc
  221. Procedure FILE_LOAD[FILENAME$,BANK]
  222. Open In 1,FILENAME$
  223. L=Lof(1)
  224. Close 1
  225. Erase BANK
  226. Reserve As Data BANK,L
  227. Bload FILENAME$,BANK
  228. End Proc
  229. ' ---------------------------------------------
  230. '
  231. '
  232. ' BANK_2_A$ is used to grab text out of a bank once you've 
  233. ' decoded it with UNCODE or UNCODE_BANK. 
  234. '
  235. ' BANK = The bank where the text is stored.
  236. ' ---------------------------------------------  
  237. Procedure BANK_2_A$[BANK]
  238.   Shared A$
  239.   If Length(BANK)<1 Then Pop Proc
  240.   A$=Space$(Length(BANK))
  241.   Copy Start(BANK),Start(BANK)+Length(BANK) To Varptr(A$)
  242. End Proc
  243. ' ---------------------------------------------
  244. '
  245. ' Example program below: 
  246. '
  247. ' * Make sure you have "Coded" and "Amiga.pic" in RAM: from this archive!  
  248. '
  249. '
  250. UNCODE["ram:coded",11,"T1111111111"]
  251. ' /\ --- Coded file is loaded and stored in bank 11 ---  
  252. FILE_LOAD["ram:amiga.pic",12]
  253. ' /\ --- Coded ILBM is loaded and stored in bank 12 ---  
  254. BANK_2_A$[11]
  255. ' /\ --- Bank contents are put into A$ --- \/
  256. Hide On 
  257. Screen Open 0,640,200,2,Hires
  258. Curs Off 
  259. Colour 1,$FFF
  260. Print A$
  261. Wait Key 
  262. Cls 0
  263. Locate 0,0
  264. Print "Loading picture. Please wait..."
  265. ' --- This will take some time unless COMPILED! ---
  266. Auto View Off 
  267. UNCODE_BANK[12,0,"P1112223334"]
  268. Screen Display 0,,40,,
  269. Screen Open 1,16,16,16,Lowres
  270. Get Palette(0)
  271. Screen Hide 1
  272. Screen 0
  273. For I=0 To 15
  274.     Colour I,$0
  275. Next I
  276. View 
  277. Wait Vbl 
  278. Fade 4 To 1
  279. Wait Key 
  280. Fade 4